home *** CD-ROM | disk | FTP | other *** search
- #!/bin/bash
-
- set -e
-
- [ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="/usr/lib/plymouth"
- [ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="/usr/share"
- [ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="/etc/plymouth/"
- [ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="/usr/share/plymouth/"
- if [ -z "$PLYMOUTH_PLUGIN_PATH" ]; then
- if [ -z "$LIB" ]; then
- PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)"
- else
- [ -z "$PLYMOUTH_LIBDIR" ] && PLYMOUTH_LIBDIR="/usr/lib"
- PLYMOUTH_PLUGIN_PATH=${PLYMOUTH_LIBDIR}/plymouth/
- fi
- fi
-
- function usage ()
- {
- echo "usage: plymouth-set-default-theme { --list | --reset | <theme-name> [ --rebuild-initrd ] | --help }"
- }
-
- function show_help() {
- cat <<EOF
- Plymouth theme chooser
- $(usage)
-
- -h, --help Show this help message
- -l, --list Show available themes
- -r. --reset Reset to default theme
- -R, --rebuild-initrd Rebuild initrd (necessary after changing theme)
- <theme-name> Name of new theme to use (see --list for available themes)
-
- EOF
- }
-
- function list_themes ()
- {
- for theme in ${PLYMOUTH_DATADIR}/plymouth/themes/*/*.plymouth; do
- [ -f $theme ] || continue;
- echo "$(basename $theme .plymouth)"
- done
- }
-
- function read_theme_name_from_file ()
- {
- echo $(grep -v '^#' $1 2> /dev/null |
- awk -F= '/Theme=/ { print $2 }')
- }
-
- function get_default_theme ()
- {
- THEME_NAME=$(read_theme_name_from_file ${PLYMOUTH_CONFDIR}/plymouthd.conf)
- if [ -z "$THEME_NAME" -o ! -r "${PLYMOUTH_DATADIR}/plymouth/themes/$THEME_NAME/$THEME_NAME.plymouth" ]; then
- THEME_NAME=$(read_theme_name_from_file ${PLYMOUTH_POLICYDIR}/plymouthd.defaults)
- fi
-
- if [ -z "$THEME_NAME" -o ! -r "${PLYMOUTH_DATADIR}/plymouth/themes/$THEME_NAME/$THEME_NAME.plymouth" ]; then
- THEME_NAME=$(basename $(readlink ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth) .plymouth)
- fi
- [ -z "$THEME_NAME" ] || echo $THEME_NAME && exit 1
- }
-
- DO_RESET=0
- DO_INITRD_REBUILD=0
- DO_LIST=0
- DO_HELP=0
- THEME_NAME=""
- while [ $# -gt 0 ]; do
- case "$1" in
-
- -l|--list)
- if [ -n "$THEME_NAME" ]; then
- echo "You can only specify --list or a theme name, not both" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- if [ $DO_RESET -ne 0 ]; then
- echo "You can only specify --reset or --list, not both" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- DO_LIST=1
- ;;
-
- -R|--rebuild-initrd)
- DO_INITRD_REBUILD=1
- ;;
-
- -r|--reset|default)
- if [ -n "$THEME_NAME" ]; then
- echo "You can only specify --reset or a theme name, not both" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- if [ $DO_LIST -ne 0 ]; then
- echo "You can only specify --reset or --list, not both" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- DO_RESET=1
- ;;
-
- -h|--help)
- DO_HELP=1
- ;;
-
- *)
- if [ -n "$THEME_NAME" ]; then
- echo "You can only specify one theme at a time" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- if [ $DO_RESET -ne 0 ]; then
- echo "You can only specify --reset or a theme name, not both" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- if [ $DO_LIST -ne 0 ]; then
- echo "You can only specify --list or a theme name, not both" >&2
- echo $(usage) >&2
- exit 1
- fi
-
- THEME_NAME="$1"
- ;;
- esac
- shift
- done
-
- if [ $DO_HELP -eq 1 ]; then
- show_help
- exit $?
- fi
-
- if [ $DO_LIST -ne 0 ]; then
- list_themes
- exit $?
- fi
-
- if [ $DO_RESET -eq 0 ] && [ $DO_INITRD_REBUILD -eq 0 ] && [ -z $THEME_NAME ]; then
- get_default_theme
- exit $?
- fi
-
- if [ `id -u` -ne 0 ]; then
- echo "This program must be run as root" >&2
- exit 1
- fi
-
- if [ $DO_RESET -ne 0 ]; then
- [ -f ${PLYMOUTH_CONFDIR}/plymouthd.conf ] || exit 0
- sed -i -e '/^Theme[[:blank:]]*=.*/d' ${PLYMOUTH_CONFDIR}/plymouthd.conf
- exit $?
- fi
-
- if [ ! -e ${PLYMOUTH_DATADIR}/plymouth/themes/${THEME_NAME}/${THEME_NAME}.plymouth ]; then
- echo "${PLYMOUTH_DATADIR}/plymouth/themes/${THEME_NAME}/${THEME_NAME}.plymouth does not exist" >&2
- exit 1
- fi
-
- MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_DATADIR}/plymouth/themes/${THEME_NAME}/${THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
-
- if [ ! -e ${PLYMOUTH_PLUGIN_PATH}${MODULE_NAME}.so ]; then
- echo "${PLYMOUTH_PLUGIN_PATH}${MODULE_NAME}.so does not exist" >&2
- exit 1
- fi
-
- [ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ] && rm -f ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth
-
- [ -d ${PLYMOUTH_CONFDIR} ] || mkdir -p ${PLYMOUTH_CONFDIR}
- grep -q '^[[]Daemon[]]' ${PLYMOUTH_CONFDIR}/plymouthd.conf 2> /null || echo '[Daemon]' >> ${PLYMOUTH_CONFDIR}/plymouthd.conf
- sed -i -e '/^Theme[[:blank:]]*=.*/d' ${PLYMOUTH_CONFDIR}/plymouthd.conf
- sed -i -e "s/^\([[]Daemon[]]\)\n*/\1\nTheme=${THEME_NAME}/" ${PLYMOUTH_CONFDIR}/plymouthd.conf
-
- if [ $DO_INITRD_REBUILD -ne 0 ] ; then
- (${PLYMOUTH_LIBEXECDIR}/plymouth/plymouth-update-initrd)
- fi
-
-